#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<stdint.h>
#include "main.h"

int main()
{
    linklist H;
    //linklist L;
    H=listinit();
    data_t value; 
    while(1)
    {
       printf("please put value:>");
       scanf("%d",&value);
       if(value==-1)
         break;
       list_add(H,value);
    } 
    listshow(H);
    list_insert( H,100,1);
    listshow(H);
     list_delete(H,3);
    listshow(H);
    H=list_free(H);
    listshow(H);
    // L=getvalue_list(H, 3);
    // if(L!=NULL)
    //     printf("The value of this pos is :>%d",L->data);
    return 0;
}

linklist listinit()
{
    //创建动态空间
    linklist H;
    H=(linklist)malloc(sizeof(listnode));
    if(H==NULL)
    {
        printf("Init failed\n");
        return H;
    }
    //赋值
    H->data=0;
    H->next=NULL;
    printf("init success\n");
    return H;
}

int list_add(linklist H,data_t value)
{
    if(value==-1)
       return 0;
    //创建新节点
    linklist p;
    if((p=(linklist)malloc(sizeof(listnode)))==NULL)
    {
        return -1;
    }
    p->data=value;
    p->next=NULL;
    //找位置插入之找位置
    linklist q;
    q=H;
    while(q->next!=NULL)
    {
        q=q->next;
    }
    //找位置插入之插入
    q->next=p;
return 0;
}

int listshow(linklist H)
{
    printf("This list is\t");
    if(H==NULL)
    {
        printf("is NULL\n");
        return 0;
    }
    while(H->next!=NULL)
    {
        printf("%d ",H->next->data);
        H=H->next;
    }
    printf("\n");
    return 0;
}

//查找第pos个位置的值
linklist getvalue_list(linklist H,int pos)
{
    linklist L;
    L=H;
    int i;
    if(L==NULL)
    {
        printf("list is NULL\n");
        return NULL;
    }
    if(pos==-1)
    {
        return L;
    }
    if(pos<0)
    {
        printf("is error\n");
        return NULL;
    }
    for(i=0;i<pos;i++)
    {
        if(L!=NULL)
        {
            L=L->next;
        }
        else{
            printf("pos is vailable\n");
            return NULL;
        }
    }
    return L;
}
int list_insert(linklist H,int value,int pos)
{
    if(H==NULL)
        return -1;
    linklist L;
    linklist M;
    //查找要插入的位置
    L=getvalue_list(H,pos-1);

    //建立一个新节点
    if((M=(linklist)malloc(sizeof(listnode)))==NULL)
        return -1;
    M->data=value;

    //建立连接
    M->next=L->next;
    L->next=M;
return 0;
}

int list_delete(linklist H,int pos)
{
    linklist L;
    linklist M;
    //找位置
    L=getvalue_list(H,pos-1);
    if(L->next==NULL)
    {
        return 0;
    }
    M=L->next;
    L->next=L->next->next;
    M=NULL;
    free(M);
    return 0;
}

linklist list_free(linklist H)
{
    linklist L;
    if(H==NULL)
    {
        return NULL;
    }
    while(H!=NULL)
    {
        L=H;
        free(L);
        H=H->next; 
    }
    return NULL;
}